/* prj4clientswing.Main
 * Gemaakt door: Frankkie
 * Gemaakt voor: Project 4 Pin
 * Gemaakt met: Java / Netbeans 6.5.1
 * Gemaakt op: Ubuntu 9.04 / Windows Vista
 * Wanneer gemaakt: 27 mei 2009 - 12 juni 2009
 * Lucky Bank !
 */
package prj4clientswing;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.Timer;
import javax.swing.border.LineBorder;

public class Main {

  public static boolean checkVoorPas = true; //kijken voor ECHTE pas er is
  public static boolean verbindingMaken = true; //Wel of niet met Bankserver Verbinden
  public static boolean kanBon = true; //Of het wel of niet Kan
  public static int vensterW = 1024; //standaard grootte venster
  public static int vensterH = 750; //750 in Ubuntu (2 balken!) //770 in windows
  public static int pasScanInterval = 3000; //3 sec.
  public static int schermCenterW = 906;
  public static int schermCenterH = 485; //was eerst 531
  public static JFrame frame;
  public static String vensterIcon = "vensterIcon.gif"; //icon, zelfde package!
  public static String vensterTitle = "Lucky Bank - PinClientSwing"; //def. title
  public static JLayeredPane[] panels;
  public static int aantalPanels = 10; //aantal panelen
  public static int startPanel = 0;   //eerste paneel
  public static String track1 = ""; //De Trackdata
  public static String track2 = "";
  public static String track3 = "";
  public static String testTrack1 = "%240005^DETester^1512?"; //Testpas
  public static String testTrack2 = ";240005=0005?";
  public static String testTrack3 = ";240005=24?";
  public static Timer timerVoorPasConsume;
  public static MagTekTrackReader mtcr;
  public static boolean hebbes = false; //of je de pas heb
  public static final int automaatnrScherm = 0;
  public static final int voerPasInScherm = 1;
  public static final int pincodeInvoerScherm = 2;
  public static final int foutmeldingenScherm = 3;
  public static JButton p1Skip;
  public static JLabel p1VoerPasInLBL;
  public static int automaatnummer = 0;
  public static boolean p0AutomaatnrGezet = false;
  public static JLabel p0AutomaatnummerLBL;
  public static JLabel p0FoutmeldingLBL;
  public static JTextField p0AutomaatnummerVeld;
  public static int lblBreedte = 500; //voor p0 en p1
  public static int lblYPos = 150; //voor p0 en p1
  public static String foutmeldingTekst = "Onbruikbare Pas!";
  public static JLabel p3LBL; //Foutmelding bij foutmeldingenScherm
  public static JButton p3Ok; //zie regel hierboven
  public static JPanel aCenter;   //De Panelen in frame
  public static JPanel aNoord;
  public static JPanel aOost;
  public static JPanel aZuid;
  public static JPanel aWest;
  public static JButton bOost1;
  public static JButton bOost2;
  public static JButton bOost3;
  public static JButton bOost4;
  public static JButton bWest1;
  public static JButton bWest2;
  public static JButton bWest3;
  public static JButton bWest4;
  public static JPanel knoppenPanel;
  public static JButton[] cGetallen;
  public static JButton cOk;
  public static JButton cClear;
  public static JLabel aBank;
  public static JPasswordField pincodeVeld;
  public static String dePincode = ""; //String, want kan met een 0 beginnnen
  public static int stopLBLx;
  public static int stopLBLy;
  public static int stopLBLw;
  public static int stopLBLh;
  public static String tBanknummer;
  public static String tRekeningnummer;
  public static String tExpdatum;
  public static String tNaam;
  public static String tPasnummer;
  public static final int keuzeScherm = 4;
  public static final int saldoScherm = 5;
  public static BorderLayout frameLayout;
  public static double hetSaldo = 0;
  public static JLabel saldoHetLBL;
  public static final int opnemenScherm = 6;
  public static int opnemenBedrag = 0;
  public static boolean wilBon = true;
  public static int wilBonScherm = 7;
  public static final int gevenScherm = 8;
  public static final int anderBedragScherm = 9;
  public static JLabel gevenLBL;
  public static String printStr = "";
  public static JLabel printLBL;
  public static JTextField anderBedragVeld;
  public static JTextArea txtAr;
  public static String anderBedragStr = "";
  public static String hour = "";
  public static String minute = "";
  public static String second = "";
  public static String dag = "";
  public static String dagNr = "";
  public static String maand = "";
  public static String jaar = "";
  public static int pasPogingen = 0;
  public static JEditorPane biljetten;
  public static int maxPasPogingen = 3;
  public static int maxCodePogingen = 3;
  public static String pijlRechts = "pijl_rechtsK.gif";
  public static String pijlLinks = "pijl_linksK.gif";
  public static JPanel pan;
  public static JTextField veld;
  public static JButton knop;
  public static PrintWriter schrijf;
  public static BufferedReader lees;
  public static String adres = "localhost";
  public static int poort = 8765;
  public static Socket client;
  public static String tekstA,  verzenden;
  public static String nieuwsteBericht = "";

  public Main() {
    try {
      //javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName()); //System
      javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); //Nimbus
    //javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatformLookAndFeelClassName()); //Metal
    } catch (Exception e) {
      System.err.println("Fout:\n" + e);
    }
    //// dingFrame
    JFrame dingFrame = new JFrame();
    txtAr = new JTextArea();
    txtAr.setText("Foo");
    txtAr.setEditable(false);
    txtAr.setFont(new Font("Monospaced", Font.PLAIN, 8));
    JScrollPane sp = new JScrollPane(txtAr);
    dingFrame.add(sp);
    dingFrame.setSize(250, 300);
    //Slash de regel hieronder als je m niet wilt zien
    dingFrame.setVisible(true);
    Dimension d = getSchermresolutie();
    dingFrame.setLocation(d.width - 250, 0);
    //// einde dingFrame
    frame = new JFrame();
    //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.addWindowListener(new java.awt.event.WindowAdapter() {

      @Override
      public void windowClosing(WindowEvent winEvt) {
        //EErst FF Pasje dumpen
        drukaf("Voor het afsluiten nog ff Pasje Dumpen (evt)");
        if (hebbes) {
          mtcr.ejectCard();
          drukaf("Pasje gedumpt");
        } else {
          drukaf("Dr is geen pasje om te dumpen");
        }
        System.exit(0);
      }
    });
    frame.setSize(vensterW, vensterH);
    frame.setTitle(vensterTitle);
    frame.setIconImage(new ImageIcon(this.getClass().getResource(vensterIcon)).getImage());
    frameLayout = new BorderLayout();
    frame.setLayout(frameLayout);
    maakComponenten();
    //JOptionPane.showMessageDialog(null,"frameW"+frame.getWidth()+"frameH"+frame.getHeight()+"aCenterW"+aCenter.getWidth()+"aCenterH"+aCenter.getHeight());
    //Verbinding maken met BankServer
    if (verbindingMaken) {
      drukaf("verbindingMaken met bankserver");
      verbindserver();
      if (!client.isConnected()) {
        JOptionPane.showMessageDialog(null, "Kan Geen Verbinding Maken Met Server!");
        drukaf("Zet vebindingMaken op false\nom zonder de Bankserver te kunnen pinnen !");
        System.exit(0);
      } else {
        drukaf("Er is Verbinding met De BankServer");
        maakvariabelen();
        communiceerserver();
      }
    } else {
      drukaf("verbindingMaken staat uit.");
    }
    //Niet Vergeten he:
    frame.setVisible(true);
  }

  void communiceerserver() {
    new Thread(new Ontvang()).start();
  }

  public static void zend(String tekstA) {
    if (tekstA != null) {
      schrijf.println(tekstA);
      drukaf("CLIENT: verzenden = " + tekstA);
    } else {
      schrijf.println("XXX");
      drukaf("CLIENT: gestopt");
      System.exit(0);
    }
  }

  void verbindserver() {
    try {
      client = new Socket(adres, poort);
      //   verbonden = true;
      drukaf("CLIENT: verbonden met server");
    } catch (Exception e) {
      drukaf("CLIENT: server niet beschikbaar" + e);
      drukaf("de server is niet beschikbaar");
      JOptionPane.showMessageDialog(null, "de Server is niet Beschikbaar");
      System.exit(0);
    }
  }

  void maakvariabelen() {
    try {
      lees = new BufferedReader(new InputStreamReader(client.getInputStream()));
      schrijf = new PrintWriter(client.getOutputStream(), true);
    } catch (Exception e) {
    }
  }

  class Ontvang implements Runnable {

    String readLine = "";

    public void run() {
      while (!client.isClosed()) {
        ontvang();
      }
    }

    public void verwerk(String a) {
      drukaf("(in: Main.java - Ontvang.verwerk)");
      nieuwsteBericht = a;
      String[] b = a.split(" ");
      if (b[0].equalsIgnoreCase("ctpn")) {
        if (b[1].equalsIgnoreCase("te_veel_pogingen")) {
          foutmeldingTekst = "Deze pas is geblokeerd";
          p3LBL.setText(foutmeldingTekst);
          showPane(foutmeldingenScherm);
        } else if (b[1].equalsIgnoreCase("goed")) {
          drukaf("Naar KeuzeScherm");
          showPane(keuzeScherm);
        //showPane(pincodeInvoerScherm);
        } else if (b[1].equalsIgnoreCase("fout")) {
          JOptionPane.showMessageDialog(null, "Pincode is niet goed !!");
          //veld Clear
          dePincode = "";
          pincodeVeld.setText(dePincode);
        } else if (b[1].equalsIgnoreCase("andere_bank")) {
          JOptionPane.showMessageDialog(null, "Deze pinpas hoort bij een andere Bank dan 'Lucky Bank'.");
        }
      /*
      if (status == 'p') {
      foutmeldingTekst = "Deze pas is geblokeerd";
      p3LBL.setText(foutmeldingTekst);
      showPane(foutmeldingenScherm);
      } else if (status == 'g') { //goed
      drukaf("Naar keuzeScherm");
      showPane(keuzeScherm);
      } else if (status == 'n') {
      JOptionPane.showMessageDialog(null, "Deze Functie is nog niet af !");
      } else if (status == 'f') {
      JOptionPane.showMessageDialog(null, "Pincode is niet goed !!");
      //veld Clear
      dePincode = "";
      } else if (status == 'a') {
      //Andere BANK
      JOptionPane.showMessageDialog(null, "Deze pinpas hoort bij een andere Bank dan 'Lucky Bank'.");
      }
       */
      } else if (b[0].equalsIgnoreCase("ovsa")) {
        //Saldo dinges
        hetSaldo = Double.parseDouble(b[1]);
        String saldoStr = "";
        if (hetSaldo % 1 == 0) { //of er nog een 0 achter moet of niet.
          saldoStr = "€ " + Double.toString(hetSaldo) + "0";
        } else {
          saldoStr = "€ " + Double.toString(hetSaldo);
        }
        saldoHetLBL.setText(saldoStr);
      } else if (b[0].equalsIgnoreCase("checkblok")) {
        //geblokt
        if (b[1].equalsIgnoreCase("ja")) {
          foutmeldingTekst = "Deze pas is geblokeerd";
          p3LBL.setText(foutmeldingTekst);
          showPane(foutmeldingenScherm);
        } else {
          drukaf("Naar Pincode Invoer Scherm");
          //showPane(keuzeScherm);
          showPane(pincodeInvoerScherm);
        }
      } else if (b[0].equalsIgnoreCase("bedragcheck")) {
        //Bedrag is gecheckt door de Servert
        if (b[1].equalsIgnoreCase("j")) {
          showPane(wilBonScherm);
        } else {
          //NIET GOED EN ZO
          if (b[1].equalsIgnoreCase("s")) {
            JOptionPane.showMessageDialog(null, "Saldo te laag!");
          } else if (b[1].equalsIgnoreCase("v")) {
            JOptionPane.showMessageDialog(null, "Niet deelbaar door 5!");
          } else {
            JOptionPane.showMessageDialog(null, "Fout!\nProbeer een ander bedrag");
          }

        }

      } else if (b[0].equalsIgnoreCase(
              "opnemen")) {
        //Opnemen
        if (b[1].equalsIgnoreCase("ok")) {
          ////////
          //Wahaha
          String Whahaha = "";
          int[] aantallen = Biljetten.doe(opnemenBedrag);
          //drukaf(aantallen.toString());
          drukaf("" + aantallen[0] + "\n" + aantallen[1] + "\n" + aantallen[2] + "\n" + aantallen[3] + "\n" + aantallen[4] + "\n" + aantallen[5] + "\n" + aantallen[6]);
          Whahaha += "€5 x " + aantallen[0] + "<br> €10 x " + aantallen[1] + "<br> €20 x " + aantallen[2] + "<br>€50 x " + aantallen[3] + "<br>€100 x " + aantallen[4] + "<br>€200 x " + aantallen[5] + "<br>€500 x " + aantallen[6];
          biljetten.setText(Whahaha);
          gevenLBL.setText("Opgenomen Bedrag: " + opnemenBedrag);
          if (wilBon) {
            printStr = "uw Bon Wordt Nu Geprint";
          } else {
            printStr = "U krijgt geen Bon";
          }
          printLBL.setText(printStr);
          frame.repaint();
          //BON PRINTEN (evt)
          if (wilBon && kanBon) {
            zend("print " + tBanknummer + " " + tRekeningnummer);
          } else {
            drukaf("wilBon=false || kanBon=false");
          }
        } else {
          JOptionPane.showMessageDialog(null, "Er iets fout gegaan bij het opnemen !");
        }
      ////////
      } else if (b[0].equalsIgnoreCase(
              "print")) {
        drukaf("Printen....");
        setCurrentTime();
        //hetSaldo = Saldo.kijk(tBanknummer, tRekeningnummer);
        hetSaldo = Double.parseDouble(b[1]);
        String saldoStr = "";
        if (hetSaldo % 1 == 0) { //of er nog een 0 achter moet of niet.
          saldoStr = "€ " + Double.toString(hetSaldo) + "0";
        } else {
          saldoStr = "€ " + Double.toString(hetSaldo);
        }
        String[] tekst = new String[7];
        tekst[0] = "Lucky Bank";
        tekst[2] = "Pinautomaatstraat 1";
        tekst[1] = "" + dag + " " + dagNr + " " + maand + " " + jaar + " " + hour + ":" + minute + ":" + second;
        //tekst[3] = "" + getParameter("Mutatie_id") + " | " + getParameter("automaatnummer");
        tekst[3] = "Automaatnr: " + automaatnummer;
        //tekst[3] = "t3";
        //tekst[4] = "t4";
        //tekst[5] = "t5";
        //tekst[6] = "t6";
        tekst[4] = "" + tPasnummer + " " + tRekeningnummer;
        tekst[5] = "Opgenomen bedrag: €" + opnemenBedrag + ".00";
        tekst[6] = "(Huidige) Saldo: " + saldoStr;
        //JOptionPane.showMessageDialog(null,tekst[2]);
        new deBon(tekst, deBon.logoImg);
        drukaf("Geprint !");
      }
    }

    public String ontvang() {
      String readTheLine;
      try {
        readTheLine = lees.readLine();
        if (readTheLine != null) {
          drukaf(readTheLine);
          verwerk(readTheLine);
          return readTheLine;
        } else {
          drukaf("verbinding met Server verbroken");
          JOptionPane.showMessageDialog(null, "verbinding met Server verbroken");
          try {
            client.close();
            System.exit(0);
          } catch (Exception ex) {
            drukaf("" + ex);
            System.exit(0);
          }
        }
      //System.err.println(readLine);
      } catch (Exception e) {
        drukaf("verbindfing Met Server verbroken");
        JOptionPane.showMessageDialog(null, "verbinding met Server verbroken");
        try {
          client.close();
          System.exit(0);
        } catch (Exception ex) {
          drukaf("" + ex);
          System.exit(0);
        }
      }
      return null;
    }
  }
//

  public void maakComponenten() {
    //Panelen in de BorderLayout van Frame
    aCenter = new JPanel();
    aCenter.setLayout(null);
    aCenter.setBorder(new LineBorder(Color.BLACK));
    frame.add(aCenter, BorderLayout.CENTER);
    //
    aNoord =
            new JPanel();
    aNoord.setLayout(new GridLayout());
    aBank =
            new JLabel("Lucky Bank");
    aBank.setFont(new Font("Monospaced", Font.BOLD, 36));
    aBank.setForeground(Color.red);
    aBank.setHorizontalAlignment(JLabel.CENTER);
    aNoord.add(aBank);
    frame.add(aNoord, BorderLayout.NORTH);
    //
    aOost =
            new JPanel();
    GridLayout oostLayout = new GridLayout(4, 0);
    oostLayout.setVgap(10);
    aOost.setLayout(oostLayout);
    //bOost1 = new JButton("  <  ");
    //bOost2 = new JButton("  <  ");
    //bOost3 = new JButton("  <  ");
    //bOost4 = new JButton("  <  ");
    bOost1 =
            new JButton();
    bOost2 =
            new JButton();
    bOost3 =
            new JButton();
    bOost4 =
            new JButton();
    ImageIcon lIcon = new ImageIcon(this.getClass().getResource(pijlLinks));
    bOost1.setIcon(lIcon);
    bOost2.setIcon(lIcon);
    bOost3.setIcon(lIcon);
    bOost4.setIcon(lIcon);
    bOost1.addActionListener(new KnopLuisteraar(31));
    bOost2.addActionListener(new KnopLuisteraar(32));
    bOost3.addActionListener(new KnopLuisteraar(33));
    bOost4.addActionListener(new KnopLuisteraar(34));
    aOost.add(bOost1);
    aOost.add(bOost2);
    aOost.add(bOost3);
    aOost.add(bOost4);
    frame.add(aOost, BorderLayout.EAST);
    //
    aZuid =
            new JPanel();
    knoppenPanel =
            new JPanel();
    GridLayout zuidLayout = new GridLayout(4, 3);
    zuidLayout.setHgap(7);
    zuidLayout.setVgap(7);
    knoppenPanel.setLayout(zuidLayout);
    maakKnoppenPanel();

    knoppenPanel.setPreferredSize(new Dimension(250, 200));
    aZuid.add(knoppenPanel);
    frame.add(aZuid, BorderLayout.SOUTH);
    //
    aWest =
            new JPanel();
    GridLayout westLayout = new GridLayout(4, 0);
    westLayout.setVgap(10);
    aWest.setLayout(westLayout);
    //bWest1 = new JButton("  >  ");
    //bWest2 = new JButton("  >  ");
    //bWest3 = new JButton("  >  ");
    //bWest4 = new JButton("  >  ");
    bWest1 =
            new JButton();
    bWest2 =
            new JButton();
    bWest3 =
            new JButton();
    bWest4 =
            new JButton();
    ImageIcon rIcon = new ImageIcon(this.getClass().getResource(pijlRechts));
    bWest1.setIcon(rIcon);
    bWest2.setIcon(rIcon);
    bWest3.setIcon(rIcon);
    bWest4.setIcon(rIcon);
    bWest1.addActionListener(new KnopLuisteraar(21));
    bWest2.addActionListener(new KnopLuisteraar(22));
    bWest3.addActionListener(new KnopLuisteraar(23));
    bWest4.addActionListener(new KnopLuisteraar(24));
    aWest.add(bWest1);
    aWest.add(bWest2);
    aWest.add(bWest3);
    aWest.add(bWest4);
    frame.add(aWest, BorderLayout.WEST);
    //Panelen in aCenter
    panels =
            new JLayeredPane[aantalPanels + 1];
    for (int i = 0; i <=
            aantalPanels; i++) {
      panels[i] = new JLayeredPane();
      panels[i].setBounds(0, 0, schermCenterW, schermCenterH);
      panels[i].setLayout(null);
      //frame.add(panels[i]);
      aCenter.add(panels[i]);
      drukaf("panels[" + i + "] gemaakt");
    }
// Begin Dingen

    maakP0();
    maakP1();

    maakP2();

    maakP3();

    maakP4();

    maakP5();

    maakP6();

    maakP7();

    maakP8();

    maakP9();
// Einde Dingen

    showPane(startPanel);
  }

  public void maakP9() {
    //anderBedragScherm
    JLabel anderBedragLBL = new JLabel("Vul een Bedrag in:");
    anderBedragLBL.setBounds(schermCenterW / 2 - 175, 100, 350, 60);
    anderBedragLBL.setFont(new Font("Monospaces", Font.BOLD, 20));
    anderBedragLBL.setForeground(Color.BLUE);
    anderBedragLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[anderBedragScherm].add(anderBedragLBL);
    anderBedragVeld =
            new JTextField();
    anderBedragVeld.setBounds(schermCenterW / 2 - 175, 220, 350, 60);
    anderBedragVeld.setFont(new Font("Monospaces", Font.BOLD, 20));
    anderBedragVeld.setForeground(Color.BLUE);
    anderBedragVeld.setHorizontalAlignment(JTextField.CENTER);
    panels[anderBedragScherm].add(anderBedragVeld);
    // Terug
    JLabel opnemenTerugLBL = new JLabel("Terug -->");
    opnemenTerugLBL.setBounds(schermCenterW - 200 - 10, schermCenterH - stopLBLh - 30 - 60 - 80, 200, 60);
    opnemenTerugLBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    opnemenTerugLBL.setForeground(Color.red);
    opnemenTerugLBL.setBorder(new LineBorder(Color.black));
    opnemenTerugLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[anderBedragScherm].add(opnemenTerugLBL);
  }

  public void maakP8() {
    //gevenScherm
    gevenLBL = new JLabel("Opgenomen Bedrag: " + opnemenBedrag);
    gevenLBL.setBounds(schermCenterW / 2 - 175, 100, 350, 60);
    gevenLBL.setFont(new Font("Monospaces", Font.BOLD, 20));
    gevenLBL.setForeground(Color.BLUE);
    gevenLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[gevenScherm].add(gevenLBL);
    printLBL =
            new JLabel(printStr);
    printLBL.setBounds(schermCenterW / 2 - 175, 200, 350, 60);
    printLBL.setFont(new Font("Monospaces", Font.BOLD, 20));
    printLBL.setForeground(Color.BLUE);
    printLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[gevenScherm].add(printLBL);
    //
    biljetten =
            new JEditorPane();
    biljetten.setBounds(schermCenterW / 2 - 175, 190, 350, 150);
    biljetten.setFont(new Font("Monospaces", Font.BOLD, 10));
    biljetten.setForeground(Color.BLACK);
    biljetten.setContentType("text/html");
    panels[gevenScherm].add(biljetten);
    //
    JButton klaar = new JButton("Ok");
    klaar.setBounds(schermCenterW / 2 - 175, 400, 350, 60);
    klaar.setFont(new Font("Monospaces", Font.BOLD, 20));
    klaar.setForeground(Color.BLUE);
    klaar.setHorizontalAlignment(JLabel.CENTER);
    klaar.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        volgendeKlant();
      }
    });
    panels[gevenScherm].add(klaar);
  }

  public void maakP7() {
    //wilBonScherm
    JLabel wilBonLBL = new JLabel("Wilt U een Bon?");
    wilBonLBL.setBounds(schermCenterW / 2 - 175, 100, 350, 60);
    wilBonLBL.setFont(new Font("Monospaces", Font.BOLD, 20));
    wilBonLBL.setForeground(Color.BLUE);
    wilBonLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[wilBonScherm].add(wilBonLBL);
    //Ja
    JLabel jaLBL = new JLabel("Ja -->");
    jaLBL.setBounds(schermCenterW - 200 - 10, schermCenterH - stopLBLh - 30 - 60 - 80, 200, 60);
    jaLBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    jaLBL.setForeground(Color.red);
    jaLBL.setBorder(new LineBorder(Color.black));
    jaLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[wilBonScherm].add(jaLBL);
    //Nee
    JLabel neeLBL = new JLabel("<-- Nee");
    neeLBL.setBounds(10, schermCenterH - stopLBLh - 30 - 60 - 80, stopLBLw, 60);
    neeLBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    neeLBL.setForeground(Color.blue);
    neeLBL.setBorder(new LineBorder(Color.black));
    neeLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[wilBonScherm].add(neeLBL);
  }

  public void maakP6() {
    //opnemenScherm
    JLabel opnemenLBL = new JLabel("Hoeveel wilt u opnemen?");
    opnemenLBL.setBounds(schermCenterW / 2 - 175, 100, 350, 60);
    opnemenLBL.setFont(new Font("Monospaces", Font.BOLD, 20));
    opnemenLBL.setForeground(Color.BLUE);
    opnemenLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[opnemenScherm].add(opnemenLBL);
    //stopLBL
    JLabel stopLBL = new JLabel("Ander Bedrag -->");
    stopLBLw =
            200;
    stopLBLx =
            schermCenterW - stopLBLw - 10;
    stopLBLh =
            60;
    stopLBLy =
            schermCenterH - stopLBLh - 30;
    stopLBL.setBounds(stopLBLx, stopLBLy, stopLBLw, stopLBLh);
    stopLBL.setFont(new Font("Monospaces", Font.BOLD, 18));
    stopLBL.setForeground(Color.red);
    stopLBL.setBorder(new LineBorder(Color.black));
    stopLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[opnemenScherm].add(stopLBL);
    // Terug
    JLabel opnemenTerugLBL = new JLabel("Terug -->");
    opnemenTerugLBL.setBounds(schermCenterW - 200 - 10, schermCenterH - stopLBLh - 30 - 60 - 80, 200, 60);
    opnemenTerugLBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    opnemenTerugLBL.setForeground(Color.red);
    opnemenTerugLBL.setBorder(new LineBorder(Color.black));
    opnemenTerugLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[opnemenScherm].add(opnemenTerugLBL);
    //BEDRAGEN
    //10
    JLabel opnemen10LBL = new JLabel("<-- 10");
    opnemen10LBL.setBounds(10, 10, stopLBLw, stopLBLh);
    opnemen10LBL.setFont(new Font("Monospaces", Font.BOLD, 18));
    opnemen10LBL.setForeground(Color.BLUE);
    opnemen10LBL.setBorder(new LineBorder(Color.black));
    opnemen10LBL.setHorizontalAlignment(JLabel.CENTER);
    panels[opnemenScherm].add(opnemen10LBL);
    //20
    JLabel opnemen20LBL = new JLabel("<-- 20");
    opnemen20LBL.setBounds(10, 10 + stopLBLh + 10 + 60, stopLBLw, stopLBLh);
    opnemen20LBL.setFont(new Font("Monospaces", Font.BOLD, 18));
    opnemen20LBL.setForeground(Color.BLUE);
    opnemen20LBL.setBorder(new LineBorder(Color.black));
    opnemen20LBL.setHorizontalAlignment(JLabel.CENTER);
    panels[opnemenScherm].add(opnemen20LBL);
    //50
    JLabel opnemen50LBL = new JLabel("<-- 50");
    opnemen50LBL.setBounds(10, schermCenterH - stopLBLh - 30 - 60 - 80, stopLBLw, 60);
    opnemen50LBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    opnemen50LBL.setForeground(Color.blue);
    opnemen50LBL.setBorder(new LineBorder(Color.black));
    opnemen50LBL.setHorizontalAlignment(JLabel.CENTER);
    panels[opnemenScherm].add(opnemen50LBL);
    //100
    JLabel opnemen100LBL = new JLabel("<-- 100");
    opnemen100LBL.setBounds(10, stopLBLy, stopLBLw, stopLBLh);
    opnemen100LBL.setFont(new Font("Monospaces", Font.BOLD, 18));
    opnemen100LBL.setForeground(Color.blue);
    opnemen100LBL.setBorder(new LineBorder(Color.black));
    opnemen100LBL.setHorizontalAlignment(JLabel.CENTER);
    panels[opnemenScherm].add(opnemen100LBL);
    //200
    JLabel opnemen200LBL = new JLabel("200 -->");
    opnemen200LBL.setBounds(schermCenterW - 200 - 10, 10, stopLBLw, stopLBLh);
    opnemen200LBL.setFont(new Font("Monospaces", Font.BOLD, 18));
    opnemen200LBL.setForeground(Color.BLUE);
    opnemen200LBL.setBorder(new LineBorder(Color.black));
    opnemen200LBL.setHorizontalAlignment(JLabel.CENTER);
    panels[opnemenScherm].add(opnemen200LBL);
    //500
    JLabel opnemen500LBL = new JLabel("500 -->");
    opnemen500LBL.setBounds(schermCenterW - 200 - 10, 10 + stopLBLh + 10 + 60, stopLBLw, stopLBLh);
    opnemen500LBL.setFont(new Font("Monospaces", Font.BOLD, 18));
    opnemen500LBL.setForeground(Color.BLUE);
    opnemen500LBL.setBorder(new LineBorder(Color.black));
    opnemen500LBL.setHorizontalAlignment(JLabel.CENTER);
    panels[opnemenScherm].add(opnemen500LBL);
  }

  public void maakP5() {
    //saldoScherm
    JLabel saldo1LBL = new JLabel("Uw Saldo Bedraagt:");
    saldo1LBL.setBounds(schermCenterW / 2 - 100, 100, 250, 60);
    saldo1LBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    saldo1LBL.setForeground(Color.BLUE);
    saldo1LBL.setHorizontalAlignment(JLabel.CENTER);
    panels[saldoScherm].add(saldo1LBL);
    //
    JLabel saldoTerugLBL = new JLabel("Terug -->");
    saldoTerugLBL.setBounds(schermCenterW - 200 - 10, schermCenterH - stopLBLh - 30 - 60 - 80, 200, 60);
    saldoTerugLBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    saldoTerugLBL.setForeground(Color.red);
    saldoTerugLBL.setBorder(new LineBorder(Color.black));
    saldoTerugLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[saldoScherm].add(saldoTerugLBL);
    //HET SALDO LATEN ZIEN
    String saldoStr = "";
    if (hetSaldo % 1 == 0) { //of er nog een 0 achter moet of niet.
      saldoStr = "€ " + Double.toString(hetSaldo) + "0";
    } else {
      saldoStr = "€ " + Double.toString(hetSaldo);
    }

    saldoHetLBL = new JLabel(saldoStr);
    saldoHetLBL.setBounds(schermCenterW / 2 - 100, 200, 250, 60);
    saldoHetLBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    saldoHetLBL.setForeground(Color.RED);
    saldoHetLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[saldoScherm].add(saldoHetLBL);
  }

  public void maakP4() {
    //keuzeScherm
    JLabel maakKeuzeLBL = new JLabel("Maak uw Keuze:");
    maakKeuzeLBL.setFont(new Font("Monospaced", Font.BOLD, 36));
    maakKeuzeLBL.setBounds((schermCenterW / 2) - 200, lblYPos, 400, 60);
    maakKeuzeLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[keuzeScherm].add(maakKeuzeLBL);
    //stopLBL
    JLabel stopLBL = new JLabel("Stoppen -->");
    stopLBLw =
            200;
    stopLBLx =
            schermCenterW - stopLBLw - 10;
    stopLBLh =
            60;
    stopLBLy =
            schermCenterH - stopLBLh - 30;
    stopLBL.setBounds(stopLBLx, stopLBLy, stopLBLw, stopLBLh);
    stopLBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    stopLBL.setForeground(Color.red);
    stopLBL.setBorder(new LineBorder(Color.black));
    stopLBL.setHorizontalAlignment(JLabel.CENTER);
    //Saldo Opvragen
    JLabel saldoKeuzeLBL = new JLabel("<-- Saldo Opvragen");
    saldoKeuzeLBL.setBounds(10, stopLBLy - stopLBLh - 80, stopLBLw, stopLBLh);
    saldoKeuzeLBL.setFont(new Font("Monospaces", Font.BOLD, 18));
    saldoKeuzeLBL.setForeground(Color.red);
    saldoKeuzeLBL.setBorder(new LineBorder(Color.black));
    saldoKeuzeLBL.setHorizontalAlignment(JLabel.CENTER);
    //Opnemen
    JLabel opnemenKeuzeLBL = new JLabel("<-- Opnemen");
    opnemenKeuzeLBL.setBounds(10, stopLBLy, stopLBLw, stopLBLh);
    opnemenKeuzeLBL.setFont(new Font("Monospaces", Font.BOLD, 18));
    opnemenKeuzeLBL.setForeground(Color.red);
    opnemenKeuzeLBL.setBorder(new LineBorder(Color.black));
    opnemenKeuzeLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[keuzeScherm].add(opnemenKeuzeLBL);
    panels[keuzeScherm].add(saldoKeuzeLBL);
    panels[keuzeScherm].add(stopLBL);
  }

  public void maakKnoppenPanel() {
    cGetallen = new JButton[13];
    for (int i = 1; i <=
            12; i++) {
      if (i == 10 || i == 11 || i == 12) {
        //OK en 0 en  Correctie
        if (i == 10) {
          cGetallen[i] = new JButton("Clear");
          cGetallen[i].addActionListener(new KnopLuisteraar(i));
          cGetallen[i].setBackground(Color.RED);
          knoppenPanel.add(cGetallen[i]);
        }

        if (i == 11) {
          cGetallen[i] = new JButton("0");
          cGetallen[i].setFont(new Font("Monospaced", Font.BOLD, 16));
          cGetallen[i].addActionListener(new KnopLuisteraar(i));
          knoppenPanel.add(cGetallen[i]);
        }

        if (i == 12) {
          cGetallen[i] = new JButton("Ok");
          cGetallen[i].addActionListener(new KnopLuisteraar(i));
          cGetallen[i].setBackground(Color.GREEN);
          knoppenPanel.add(cGetallen[i]);
        }

      } else {
        cGetallen[i] = new JButton(Integer.toString(i));
        cGetallen[i].setFont(new Font("Monospaced", Font.BOLD, 16));
        cGetallen[i].addActionListener(new KnopLuisteraar(i));
        knoppenPanel.add(cGetallen[i]);
      }



    }
  }

  public class KnopLuisteraar implements ActionListener {
    /*  >        <  (21 - 31)
     *  > SCHERM <  (22 - 32)
     *  >        <  (23 - 33)
     *  >        <  (24 - 34)
     *
     *    1 2 3
     *    4 5 6
     *    7 8 9
     *    C 0 ok    (10 - 11 - 12)
     */

    int hetGetal = 0;

    public KnopLuisteraar(int getal) {
      hetGetal = getal;
    }

    public void actionPerformed(ActionEvent e) {
      //JOptionPane.showMessageDialog(null, "Getal: " + hetGetal);

      if (hetGetal == 34 && (getVisiblePane() == pincodeInvoerScherm || getVisiblePane() == keuzeScherm)) { //Stoppen
        volgendeKlant();
      }

      if (getVisiblePane() == saldoScherm || getVisiblePane() == anderBedragScherm) {
        if (hetGetal == 33) {
          drukaf("Naar keuzeScherm");
          showPane(keuzeScherm);
        }
      }

      if (getVisiblePane() == 0) {
        if (hetGetal == 10) { //clear//AUTOMAATNUMMER INVULLEN SCHERM
          p0AutomaatnummerVeld.setText("");
        }
        if (hetGetal == 11) { //0
          p0AutomaatnummerVeld.setText(p0AutomaatnummerVeld.getText() + "0");
        }
        if (hetGetal == 12) { //ok
          try {
            automaatnummer = Integer.parseInt(p0AutomaatnummerVeld.getText());
            //gelukt
            //NU CHECKEN BIJ SERVER
            //String checki = "inlg ok";
            zend("inlg " + automaatnummer);
            while (nieuwsteBericht.equalsIgnoreCase("")) {
              //W8en
            }
            //EInde Check
            if (nieuwsteBericht.equalsIgnoreCase("inlg ok")) {
              zetAutomaatnummer();
            } else {
              //Niet GOed
              JOptionPane.showMessageDialog(null, "Fout:\n" + nieuwsteBericht);
            }
          } catch (Exception ex) {
            p0FoutmeldingLBL.setVisible(true);
            drukaf("Fout:\n" + ex);
          }
        }
        if (hetGetal < 10) {
          p0AutomaatnummerVeld.setText(p0AutomaatnummerVeld.getText() + Integer.toString(hetGetal));
        }
      }

      if (getVisiblePane() == wilBonScherm) {
        //WEL OF NIET EEN BON
        if (hetGetal == 23) {
          wilBon = false;
          //NEE
          drukaf("wil geen bon");
        }
        if (hetGetal == 33) {
          wilBon = true;
          //JA
          drukaf("wil wel een bon");
        }
        drukaf("Naar gevenScherm");
        showPane(gevenScherm);
      }
///////////////////////////////////////////////////////////////////////////////////////////////////
      ////////////////////////////////////////////////////////////////////
      if (getVisiblePane() == anderBedragScherm) {
        //Max. 5 getallen
        if (hetGetal < 10) {
          if (anderBedragStr.length() != 5) {
            anderBedragStr += "" + hetGetal;
          }
        }
        if (hetGetal == 10) { //clear
          anderBedragStr = "";
        }
        if (hetGetal == 11) { //0
          if (anderBedragStr.length() != 5) {
            anderBedragStr += "0";
          }
        }
        if (hetGetal == 12) { //Ok
          //Controleren
          opnemenBedrag = Integer.parseInt(anderBedragStr);
          zend("bedragcheck " + opnemenBedrag + " " + tBanknummer + " " + tRekeningnummer);
        /*
        char status = bedragCheckStatus(anderBedragStr, tBanknummer, tRekeningnummer);
        if (status == 'N') {
        drukaf("Niet Gecheckt");
        } else if (status == 'A') {
        drukaf("Andere Bank");
        JOptionPane.showMessageDialog(null, "Er kan nog niet worden gepint bij een andere bank");
        } else if (status == 'J') {
        drukaf("Naar wilBonScherm");
        showPane(wilBonScherm);
        } else if (status == 'V') {
        drukaf("Niet deelbaar door 5");
        JOptionPane.showMessageDialog(null, "Niet deelbaar door 5");
        } else if (status == 'S') {
        drukaf("Saldo te Laag");
        JOptionPane.showMessageDialog(null, "Saldo te Laag");
        } else if (status == 'L') {
        drukaf("Bedrag te laag");
        JOptionPane.showMessageDialog(null, "Bedrag te laag, pin minimaal 5 euro");
        } else if (status == 'F') {
        drukaf("Fout (numberFormatException of zo)");
        JOptionPane.showMessageDialog(null, "Er is een FOut opgetreden,\nVul een ander bedrag in en probeer opnieuw\n");
        }
         */
        }
        anderBedragVeld.setText(anderBedragStr);
      }

      if (getVisiblePane() == opnemenScherm) {
        if (hetGetal == 33) {
          drukaf("Naar keuzeScherm");
          showPane(keuzeScherm);
        }
        if (hetGetal == 34) {
          //NAAR ANDERBEDRAG SCHERM !!!
          drukaf("Naar anderBedragScherm");
          showPane(anderBedragScherm);
        }
        if (hetGetal >= 21 && hetGetal <= 32) {
          //Het is dus een BedragKnop
          //NAAR WILBON SCHERM !!!
          if (hetGetal == 21) {
            opnemenBedrag = 10;
          }
          if (hetGetal == 22) {
            opnemenBedrag = 20;
          }
          if (hetGetal == 23) {
            opnemenBedrag = 50;
          }
          if (hetGetal == 24) {
            opnemenBedrag = 100;
          }
          if (hetGetal == 31) {
            opnemenBedrag = 200;
          }
          if (hetGetal == 32) {
            opnemenBedrag = 500;
          }
          zend("bedragcheck " + opnemenBedrag + " " + tBanknummer + " " + tRekeningnummer);
        /*
        drukaf("opnemenBedrag=" + opnemenBedrag);
        drukaf("Naar wilBonScherm");
        showPane(wilBonScherm);
         */
        }
      }

      if (getVisiblePane() == keuzeScherm) {
        if (hetGetal == 23) { //Saldo
          drukaf("Naar saldoScherm");
          showPane(saldoScherm);
        }
        if (hetGetal == 24) { //Opnemen
          drukaf("Naar opnemenScherm");
          showPane(opnemenScherm);
        }
      }

      if (getVisiblePane() == pincodeInvoerScherm) {
        if (hetGetal == 10) { //clear
          dePincode = "";
        }
        if (hetGetal == 11) { //0
          if (dePincode.length() != 4) {
            dePincode += 0;
          }
        }
        if (hetGetal == 12) { //ok
          //OK KNOP
          if (dePincode.length() != 4) {
            JOptionPane.showMessageDialog(null, "Vul 4 getallen in !");
          } else {
            zend("ctpn " + tBanknummer + " " + tPasnummer + " " + dePincode);
          }
        //char status = checkPincode();
          /*
        if (status == 'p') {
        foutmeldingTekst = "Deze pas is geblokeerd";
        p3LBL.setText(foutmeldingTekst);
        showPane(foutmeldingenScherm);
        } else if (status == 'g') { //goed
        drukaf("Naar keuzeScherm");
        showPane(keuzeScherm);
        } else if (status == 'n') {
        JOptionPane.showMessageDialog(null, "Deze Functie is nog niet af !");
        } else if (status == 'f') {
        JOptionPane.showMessageDialog(null, "Pincode is niet goed !!");
        //veld Clear
        dePincode = "";
        } else if (status == 'a') {
        //Andere BANK
        JOptionPane.showMessageDialog(null, "Deze pinpas hoort bij een andere Bank dan 'Lucky Bank'.");
        }
         */
        //Soort van controleren !
        }
        if (hetGetal < 10) {
          if (dePincode.length() != 4) {
            dePincode += hetGetal;
          }
        }
        pincodeVeld.setText(dePincode);
      }
    }
  }

  public void zetAutomaatnummer() {
    boolean isOk = true;
    if (isOk) {
      p0AutomaatnrGezet = true;
      aBank.setText("Lucky Bank (" + automaatnummer + ")");
      showPane(voerPasInScherm);
    } else {
      //VOID
    }
  }

  public void maakP0() {
    //0e paneel
    p0AutomaatnummerLBL = new JLabel("Voer het Automaatnummer in:");
    p0AutomaatnummerLBL.setBounds((schermCenterW / 2) - (lblBreedte / 2), lblYPos, lblBreedte, 60);
    p0AutomaatnummerLBL.setHorizontalAlignment(JLabel.CENTER);
    p0AutomaatnummerLBL.setFont(new Font("Monospaced", Font.BOLD, 24));
    p0FoutmeldingLBL =
            new JLabel("Dat was geeen Correct getal !");
    p0FoutmeldingLBL.setBounds((schermCenterW / 2) - (lblBreedte / 2), lblYPos + 70, lblBreedte, 50);
    p0FoutmeldingLBL.setHorizontalAlignment(JLabel.CENTER);
    p0FoutmeldingLBL.setFont(new Font("Monospaced", Font.BOLD, 24));
    p0FoutmeldingLBL.setBorder(new LineBorder(Color.red));
    p0FoutmeldingLBL.setVisible(false);
    p0AutomaatnummerVeld =
            new JTextField();
    p0AutomaatnummerVeld.setBounds((schermCenterW / 2) - (lblBreedte / 8), lblYPos + 130, lblBreedte / 4, 30);
    p0AutomaatnummerVeld.setFont(new Font("Monospaced", Font.PLAIN, 14));
    panels[automaatnrScherm].add(p0AutomaatnummerLBL);
    panels[automaatnrScherm].add(p0AutomaatnummerVeld);
    panels[automaatnrScherm].add(p0FoutmeldingLBL);
  }

  public void maakP1() {
    //1e paneel
    //Voer Pas In Scherm
    if (checkVoorPas) {
      mtcr = new MagTekTrackReader();
    }

    timerVoorPasConsume = new Timer(pasScanInterval, new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        pasChecke();
      }
    });
    timerVoorPasConsume.setRepeats(true);
    //timerVoorPasConsume.start(); //Wordt pas gestart als dit scherm verschijnt! (zie showPane)
    p1Skip =
            new JButton("Skip");
    p1Skip.setBounds(5, 5, 100, 30);
    p1Skip.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        track1 = JOptionPane.showInputDialog("Track1", testTrack1);
        track2 =
                JOptionPane.showInputDialog("Track2", testTrack2);
        track3 =
                JOptionPane.showInputDialog("Track3", testTrack3);
        drukaf(track1 + "\n" + track2 + "\n" + track3);
        if (TrackInfo.tracksCheck(track1, track2, track3) && TrackInfo.rekeningnummerCheck(track1, track2, track3)) {
          //GOED
          drukaf("Pas voldoet aan het Format");
          infoUitTracksHalen();

          zend("checkblok " + tBanknummer + " " + tPasnummer);
        //showPane(pincodeInvoerScherm);
        } else {
          //FOUT
          drukaf("Onbruikbare Pas !!");
          showPane(foutmeldingenScherm);
        }
//showPane(pincodeInvoerScherm);

      }
    });
    panels[voerPasInScherm].add(p1Skip);
    p1VoerPasInLBL =
            new JLabel("Voer uw Pas In");
    p1VoerPasInLBL.setBounds((schermCenterW / 2) - (lblBreedte / 2), lblYPos, lblBreedte, 60);
    p1VoerPasInLBL.setHorizontalAlignment(JLabel.CENTER);
    p1VoerPasInLBL.setFont(new Font("Monospaced", Font.BOLD, 32));
    panels[voerPasInScherm].add(p1VoerPasInLBL);
    panels[voerPasInScherm].repaint();
  }

  public void pasRecheck() {
    drukaf("RECHECK !");
    // Tracks lezen
    track3 = mtcr.readTrack((byte) 0x03);
    track2 = mtcr.readTrack((byte) 0x02);
    track1 = mtcr.readTrack((byte) 0x01);
    drukaf("De Tracks (VOOR AANPASSINGEN): \n" + track1 + "\n" + track2 + "\n" + track3);
    // Dinges eraf halen
    try {
      track1 = track1.substring(7);
      track2 = track2.substring(7, 20);
      track3 = track3.substring(7, 18);
      String[] a = track1.split("\\?");
      track1 = a[0] + "?";
    } catch (Exception exc) {
      drukaf("Die MagTekReader\nheeft de tracks zeker\nweer eens niet goed\ngelezen *ZUCHT*");
      drukaf("FOUT: \n" + exc);
    }
//
    drukaf("De Tracks: \n" + track1 + "\n" + track2 + "\n" + track3);
    //
    if (TrackInfo.tracksCheck(track1, track2, track3) && TrackInfo.rekeningnummerCheck(track1, track2, track3)) {
      //GOED
      drukaf("Pas voldoet aan het Format");
      infoUitTracksHalen();

      pasPogingen = 0;
      //BLOKKEER
      if (tBanknummer.equalsIgnoreCase("24")) {
        zend("checkblok " + tBanknummer + " " + tPasnummer);
      } else {
        zend("start_trans " + tBanknummer + " " + tRekeningnummer);
      }
    /*
    if (!checkGeblokeerd()) {
    showPane(pincodeInvoerScherm);
    } else {
    foutmeldingTekst = "Deze pas is geblokeerd";
    p3LBL.setText(foutmeldingTekst);
    showPane(foutmeldingenScherm);
    }
     */

    } else {
      //FOUT
      drukaf("Pas niet goed gelezen !!!");
      pasPogingen++;

      if (pasPogingen >= 3) {
        drukaf("Onbruikbare Pas !!");
        showPane(foutmeldingenScherm);
      } else {
        drukaf("Pas onpnieuw checken");
        pasRecheck();
      }
    }
  }

  public void pasChecke() {
    if (checkVoorPas) { //check wel of niet uitvoeren
      if (!hebbes) {
        drukaf("Nog niet hebbes, checken of er een pas is.");
        mtcr.ejectCard();
        if (mtcr.consumeCard()) {
          drukaf("Hebbes !");
          hebbes = true;
          // Tracks lezen
          track3 = mtcr.readTrack((byte) 0x03);
          track2 = mtcr.readTrack((byte) 0x02);
          track1 = mtcr.readTrack((byte) 0x01);
          drukaf("De Tracks (VOOR AANPASSINGEN): \n" + track1 + "\n" + track2 + "\n" + track3);
          // Dinges eraf halen
          try {
            track1 = track1.substring(7);
            track2 = track2.substring(7, 20);
            track3 = track3.substring(7, 18);
            String[] a = track1.split("\\?");
            track1 = a[0] + "?";
          } catch (Exception exc) {
            drukaf("Die MagTekReader\nheeft de tracks zeker\nweer eens niet goed\ngelezen *ZUCHT*");
            drukaf("FOUT: \n" + exc);
          }
//

          drukaf("De Tracks: \n" + track1 + "\n" + track2 + "\n" + track3);
          //
          if (TrackInfo.tracksCheck(track1, track2, track3) && TrackInfo.rekeningnummerCheck(track1, track2, track3)) {
            //GOED
            drukaf("Pas voldoet aan het Format");
            infoUitTracksHalen();
            pasPogingen = 0;
            //BLOKKEER
            if (tBanknummer.equalsIgnoreCase("24")) {
              zend("checkblok " + tBanknummer + " " + tPasnummer);
            } else {
              zend("start_trans " + tBanknummer + " " + tRekeningnummer);
            }
          //GEBLOKKEERD CHECK
/*            if (!checkGeblokeerd()) {
          showPane(pincodeInvoerScherm);
          } else {
          drukaf("Naar foutmeldingenScherm");
          foutmeldingTekst = "Deze pas is geblokeerd";
          p3LBL.setText(foutmeldingTekst);
          showPane(foutmeldingenScherm);
          }
           */
          } else {
            //FOUT
            drukaf("Pas niet goed gelezen !!!");
            pasPogingen++;

            if (pasPogingen >= maxPasPogingen) {
              drukaf("Onbruikbare Pas !!");
              showPane(foutmeldingenScherm);
            } else {
              drukaf("Pas onpnieuw checken");
              pasRecheck();
            }
          }
        } else {
          hebbes = false;
        }
      }
    } else {
      drukaf("checkVoorPas staat uit. Gebruik de Skip-knop");
    }
  }

  public void infoUitTracksHalen() {
    //info eruit vissen
    //Bank Nummer
    drukaf("Banknummer: " + track3.substring(8, 10));
    tBanknummer =
            track3.substring(8, 10);
    if (!tBanknummer.equals("24")) {
      JOptionPane.showMessageDialog(null, "Hoort bij:\nBank " + tBanknummer);
    }
    //Rekeningnummer

    drukaf("Rekeningnummer: " + track1.substring(1, 7));
    tRekeningnummer = track3.substring(1, 7);
    //pasnummer
    drukaf("Pasnummer: " + track2.substring(8, 12));
    tPasnummer = track2.substring(8, 12);
    //ExpDatum
    String[] dingen = track1.split("[\\\\^]");
    tExpdatum = dingen[2]; //nu nog die ? weghalen aan het einde
    tExpdatum = tExpdatum.substring(0, 4);
    drukaf("ExpDatum: " + tExpdatum);
    drukaf("Dus geldig tot: " + tExpdatum.substring(2, 4) + "-20" + tExpdatum.substring(0, 2));
    //Naam
    tNaam = dingen[1];
    drukaf("Naam: " + tNaam);
  //Nog een vage expdatum check...
  }

  public void maakP2() {
    //pincodeInvoerScherm
    JLabel p2PincodeLBL = new JLabel("Voer uw Pincode in");
    p2PincodeLBL.setBounds((schermCenterW / 2) - (lblBreedte / 2), lblYPos, lblBreedte, 60);
    p2PincodeLBL.setFont(new Font("Monospaced", Font.BOLD, 36));
    p2PincodeLBL.setForeground(Color.blue);
    p2PincodeLBL.setHorizontalAlignment(JLabel.CENTER);
    pincodeVeld =
            new JPasswordField();
    pincodeVeld.setFont(new Font("Monospaced", Font.PLAIN, 42));
    pincodeVeld.setHorizontalAlignment(JPasswordField.CENTER);
    pincodeVeld.setBounds((schermCenterW / 2) - (150 / 2), lblYPos + 70, 150, 60);
    //stopLBL
    JLabel stopLBL = new JLabel("Stoppen -->");
    stopLBLw =
            200;
    stopLBLx =
            schermCenterW - stopLBLw - 10;
    stopLBLh =
            60;
    stopLBLy =
            schermCenterH - stopLBLh - 30;
    stopLBL.setBounds(stopLBLx, stopLBLy, stopLBLw, stopLBLh);
    stopLBL.setFont(new Font("Monospaces", Font.BOLD, 24));
    stopLBL.setForeground(Color.red);
    stopLBL.setBorder(new LineBorder(Color.black));
    stopLBL.setHorizontalAlignment(JLabel.CENTER);
    panels[pincodeInvoerScherm].add(stopLBL);
    panels[pincodeInvoerScherm].add(p2PincodeLBL);
    panels[pincodeInvoerScherm].add(pincodeVeld);
  }

  public void maakP3() {
    //foutmeldingenScherm
    p3LBL = new JLabel(foutmeldingTekst);
    p3Ok =
            new JButton("Ok");
    p3LBL.setBounds((schermCenterW / 2) - (lblBreedte / 2), lblYPos, lblBreedte, 60);
    p3Ok.setBounds((schermCenterW / 2) - (lblBreedte / 2), lblYPos + 70, lblBreedte, 60);
    panels[foutmeldingenScherm].add(p3LBL);
    panels[foutmeldingenScherm].add(p3Ok);
    p3Ok.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        volgendeKlant();
      }
    });
  }

  public void showPane(int nr) {
    drukaf("showPane(" + nr + ")");
    for (int i = 0; i <=
            aantalPanels; i++) {
      panels[i].setVisible(false);
    }

    panels[nr].setVisible(true);

    //Triggertjes
    if (timerVoorPasConsume.isRunning() && nr != voerPasInScherm) {
      timerVoorPasConsume.stop();
    }

    switch (nr) {
      case automaatnrScherm: {
        if (p0AutomaatnrGezet == true) {
          showPane(voerPasInScherm);

        }

        break;
      }

      case voerPasInScherm:
         {
          if (!timerVoorPasConsume.isRunning() && nr == voerPasInScherm) {
            drukaf("timerVooerPasConsume wordt nu gestart");
            timerVoorPasConsume.start();
          }

        }
        break;

      case gevenScherm:
         {
          zend("opnemen " + opnemenBedrag + " " + tBanknummer + " " + tRekeningnummer + " " + automaatnummer);
        }

        break;

      case saldoScherm:
         {
          String saldoStr = "Bezig met Laden...";
          saldoHetLBL.setText(saldoStr);
          zend("ovsa " + tBanknummer + " " + tRekeningnummer);
        /*
        //Actuele Saldo Ophalen
        hetSaldo = Saldo.kijk(tBanknummer, tRekeningnummer);
        String saldoStr = "";
        if (hetSaldo % 1 == 0) { //of er nog een 0 achter moet of niet.
        saldoStr = "€ " + Double.toString(hetSaldo) + "0";
        } else {
        saldoStr = "€ " + Double.toString(hetSaldo);
        }
        saldoHetLBL.setText(saldoStr);
         */
        }

        break;

      default: {
        break;
      }

    }
  }

  public int getVisiblePane() {
    for (int i = 0; i <=
            aantalPanels; i++) {
      if (panels[i].isVisible()) {
        return i;
      }

    }
    return -1;
  }

  public void volgendeKlant() {
    //Dit gaat alles resetten zodat de volgende klant kan
    drukaf("Volgende Klant XD");
    track1 =
            "";
    pasPogingen =
            0;
    track2 =
            "";
    track3 =
            "";
    dePincode =
            "";
    anderBedragStr =
            "";
    anderBedragVeld.setText(anderBedragStr);
    opnemenBedrag =
            0;
    pincodeVeld.setText(dePincode);
    if (hebbes && checkVoorPas) {
      mtcr.ejectCard();
      hebbes =
              false;
    }

    showPane(voerPasInScherm);
  }

  public static void drukaf(String str) {
    txtAr.setText(txtAr.getText() + "\n" + str);
    System.out.println(str);
  }

  public static java.awt.Dimension getSchermresolutie() {
    return java.awt.Toolkit.getDefaultToolkit().getScreenSize();
  /* Voorbeeld code:
   * Dimension a = OokHandig.getSchermresolutie();
   * int breed = a.width;
   * int hoog = a.height;
   */
  }

  public static void main(String[] args) {
    deComPoortZoekert();
    new Main();
  }

  public static void deComPoortZoekert() {
    //String standaardPoort = MagTekTrackReader.portName;
    //String werkendePoort = MagTekTrackReader.portName;
    for (int i = 1; i <=
            9; i++) {
      try {
        javax.comm.CommPortIdentifier.getPortIdentifier("COM" + i);
        //Als geen Exception
        System.out.println("COM" + i + " Werkt XD !");
        MagTekTrackReader.portName = "COM" + i;
        return;

      } catch (Exception e) {
        System.out.println("COM" + i + " Werkt niet");
      }

    }
  }

  public void setCurrentTime() {
    Calendar calendar = new GregorianCalendar();
    hour =
            Integer.toString(calendar.get(Calendar.HOUR_OF_DAY));
    minute =
            Integer.toString(calendar.get(Calendar.MINUTE));
    second =
            Integer.toString(calendar.get(Calendar.SECOND));
    if (calendar.get(Calendar.HOUR_OF_DAY) < 10) {
      hour = "0" + calendar.get(Calendar.HOUR_OF_DAY);
    }

    if (calendar.get(Calendar.MINUTE) < 10) {
      minute = "0" + calendar.get(Calendar.MINUTE);
    }

    if (calendar.get(Calendar.SECOND) < 10) {
      second = "0" + calendar.get(Calendar.SECOND);
    }

    int t = 0;
    t =
            calendar.get(Calendar.DAY_OF_WEEK);
    switch (t) {
      case 1: {
        dag = "Zo";
        break;

      }


      case 2: {
        dag = "Ma";
        break;

      }


      case 3: {
        dag = "Di";
        break;

      }


      case 4: {
        dag = "Wo";
        break;

      }


      case 5: {
        dag = "Do";
        break;

      }


      case 6: {
        dag = "Vri";
        break;

      }


      case 7: {
        dag = "Za";
        break;

      }


      default: {
        dag = "" + t;
        break;

      }


    }
    dagNr = Integer.toString(calendar.get(Calendar.DAY_OF_MONTH));
    t =
            calendar.get(Calendar.MONTH);
    switch (t) {
      case 0: {
        maand = "Januari";
        break;

      }


      case 1: {
        maand = "Februari";
        break;

      }


      case 2: {
        maand = "Maart";
        break;

      }


      case 3: {
        maand = "April";
        break;

      }


      case 4: {
        maand = "Mei";
        break;

      }


      case 5: {
        maand = "Juni";
        break;

      }


      case 6: {
        maand = "Juli";
        break;

      }


      case 7: {
        maand = "Augustus";
        break;

      }


      case 8: {
        maand = "September";
        break;

      }


      case 9: {
        maand = "Oktober";
        break;

      }


      case 10: {
        maand = "November";
        break;

      }


      case 11: {
        maand = "December";
        break;

      }


      default: {
        maand = "" + (t - 1);
        break;

      }


    }
    jaar = Integer.toString(calendar.get(Calendar.YEAR));
  }
}

/* Zooi-Code
 * if (vensterSchermRes) {
      //venster grootte = resolutie
      Dimension res = getSchermresolutie();
      vensterW = res.width;
      vensterH = res.height - taakbalkHoogte; //min, voor de eventuele taakbalk.
    //Einde venster grootte = resolutie
    }
 *
 * //frame.setResizable(false);
   //frame.setTitle("sw = " + vensterW + " sh = " + vensterH + "  fw=" + schermCenterW+ " fh=" + frame.getHeight());
 *
   //public static boolean vensterSchermRes = false; //grootte venster aanpassen aan Res
   //public static int taakbalkHoogte = 50; //hoogte die eraf wordt gehaald als compensatie van de taakbalk
 *
 */